.libPaths( c( "/opt/R/3.6.2/lib/R/library" , .libPaths() ) )
.libPaths()
[1] "/opt/R/3.6.2/lib/R/library"                      
[2] "/PHShome/bm363/R/x86_64-pc-linux-gnu-library/3.6"

load datasets

library(tidyverse)
library(readxl)
GTP_pheno3 <- read_excel("/data/humgen/GTP_genomics/PLINK/input/pheno/ResslerData_cleaned_reduced_For Machine Learning_withSIDs.xlsx", sheet = 1) %>% 
  print() 

GTP_pheno3 %>% 
#  count(sex)
#  count(PTSD_diagnosis)
  subset(select=c("sex","PTSD_diagnosis")) %>% table()
GTP_pheno3 <- read_excel("/data/humgen/GTP_genomics/PLINK/input/pheno/ResslerData_cleaned_reduced_For Machine Learning_withSIDs.xlsx", sheet = 1) %>% 
  print() 

GTP_pheno3 %>% 
#  count(sex)
#  count(PTSD_diagnosis)
  subset(select=c("sex","PTSD_diagnosis")) %>% table()
      PTSD_diagnosis
sex       0    1 2092 7011
  0    1300  552    0    0
  1    3517 1631    0    0
  519     0    0    1    0
  8584    0    0    0    1

What is a better trauma exposure measure we should use? Do we have CRP and other molecular markers measured? Do we have BMI and other anthropometric measurements?

GTP_pheno4 <- GTP_pheno3 %>% 
#  filter(!is.na(PTSD_status)) %>% 
#  filter(PTSD_status<125) %>% 
  subset(select=c("PTSD_diagnosis", "CTQTOT","education")) %>% 
  mutate(CA4 = cut(CTQTOT, breaks = c(-Inf,40,60,80,Inf), right=T)) %>%
  mutate(EA4 = cut(education, breaks = c(-Inf,1,3,4,Inf), right=T)) 

GTP_pheno4 %>% print()
#, labels=c("low","midlow","midhigh","high")
GTP_pheno4 <- GTP_pheno3 %>% 
#  filter(!is.na(PTSD_status)) %>% 
#  filter(PTSD_status<125) %>% 
  subset(select=c("PTSD_diagnosis", "CTQTOT","education")) %>% 
  mutate(CA4 = cut(CTQTOT, breaks = c(-Inf,40,60,80,Inf), right=T)) %>%
  mutate(EA4 = cut(education, breaks = c(-Inf,1,3,4,Inf), right=T)) 

GTP_pheno4 %>% print()
#, labels=c("low","midlow","midhigh","high")

Genotype data

# Number of variants and samples
wc -l /data/humgen/GTP_genomics/PLINK/input/PGC_GTP_June2017/GTPC/qc/pts_gtpc_mix_am-qc.{bim,fam}

# an alternative geno data file location (befoe QC with) with slightly more samples and variants
wc -l /data/humgen/GTP_genomics/PLINK/input/PGC_GTP_June2017/GTPC/starting_data/Adam_final_GTP_pheno.{bim,fam}
GTP_fam1 <- read_delim("/data/humgen/GTP_genomics/PLINK/input/PGC_GTP_June2017/GTPC/qc/pts_gtpc_mix_am-qc.fam",
                         col_names = F, delim = "\t") %>% 
  rename_all(funs(c("FID","IID","p1","p2","gend","phen"))) %>% 
  mutate(ID = str_replace(IID,"PTSD_",""))

GTP_pheno4 <- GTP_pheno3 %>% 
  mutate(sid = as.character(sid)) %>% 
  inner_join(GTP_fam1, by=c("sid"="ID")) %>% 
  print()

#write.table(GTP_pheno4, "/data/humgen/burook/GTP_analysis/GTP_pheno1.txt", row.names = FALSE, col.names = TRUE, quote = FALSE, sep = "\t")

Ancestry estimation and confirmation

Prepare a file with self-identified race.

GTP_fam1 <- read_delim("/data/humgen/GTP_genomics/PLINK/input/PGC_GTP_June2017/GTPC/qc/pts_gtpc_mix_am-qc.fam",
                         col_names = F, delim = "\t") %>% 
  rename_all(funs(c("FID","IID","p1","p2","gend","phen"))) %>% 
  mutate(ID = str_replace(IID,"PTSD_",""))
Parsed with column specification:
cols(
  X1 = col_character(),
  X2 = col_character(),
  X3 = col_double(),
  X4 = col_double(),
  X5 = col_double(),
  X6 = col_double()
)
GTP_pheno4 <- GTP_pheno3 %>% 
  mutate(sid = as.character(sid)) %>% 
  inner_join(GTP_fam1, by=c("sid"="ID")) %>% 
  print()

#write.table(GTP_pheno4, "/data/humgen/burook/GTP_analysis/GTP_pheno1.txt", row.names = FALSE, col.names = TRUE, quote = FALSE, sep = "\t")
GTP_race2 <- GTP_pheno4 %>% 
  subset(select=c("IID","race_ethnic")) %>% 
  rename(Ethnicity_race=race_ethnic)

#write.table(GTP_race2, "/data/humgen/burook/GTP_analysis/GTP_race2.txt", row.names = FALSE, col.names = TRUE, quote = FALSE, sep = "\t")
t1 <- read_delim("/data/humgen/burook/GTP_analysis/table_pred", col_names = TRUE, delim = " ")

t1 %>% 
  filter(is.na(SuperPopulation)) %>% 
  group_by(predtree) %>%
  summarise(n=n()) %>%
  mutate(n_perc = 100*n / sum(n)) %>% 
  print()

Computing PRS

 t1 %>% 
   left_join(target_race, by=c("Sample"="IID")) %>% 
   filter(!is.na(Ethnicity_race.y)) %>% 
   subset(select=c("Ethnicity_race.y","predtree")) %>% 
   table() %>% 
   print()
                predtree
Ethnicity_race.y  AFR  EAS  EUR  SAS
            0    5698    0   30    4
            1      13    0   17   12
            2       0    1    3    4
            3       1    0  191    2
            4      82    0   19    9
            5      67    0    9    0
            8504    2    0    0    0
# with freeze-2 PGC-PTSD summ stats
R --file=/PHShome/bm363/bin/PRSice_v1.25/PRSice_v1.25.R -q --args  \
  plink /PHShome/bm363/bin/plink2 \
  base /data/humgen/burook/sum_stats/pts_aam_freeze2_overall.results \
  target /data/humgen/burook/GTP_analysis/gtp_ptsd/tmp_gtp1 \
  pheno.file /data/humgen/burook/GTP_analysis/GTP_race2.txt \
  binary.target T \
  covariates C1,C2,C3,C4,C5,C6,C7,C8,C9,C10 \
  clump.snps T \
  prune.snps F \
  quantiles T \
  figname gtp_ptsd \
  wd /data/humgen/burook/GTP_analysis/gtp_ptsd/
rm /data/humgen/burook/GTP_analysis/gtp_ptsd/rawfile.raw
ls /data/humgen/burook/GTP_analysis/gtp_ptsd/
#head /data/humgen/burook/GTP_analysis/GTP_pheno1.txt
LS0tCnRpdGxlOiAiQV9HVFBfZXhwbG9yaW5nX3BoZW5vdHlwZV9kYXRhIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZmxvYXQ6IHllcwpkYXRlOiAiSmFuLiAyMSwgMjAyMCIKLS0tCgpgYGB7ciwgc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkKYGBgCgoKYGBge3IsIGVjaG89RkFMU0V9Ci5saWJQYXRocyggYyggIi9vcHQvUi8zLjYuMi9saWIvUi9saWJyYXJ5IiAsIC5saWJQYXRocygpICkgKQoubGliUGF0aHMoKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShyZWFkeGwpCmBgYAoKCiMjIGxvYWQgZGF0YXNldHMKCmBgYHtyfQojIHBoZW5vdHlwZSBkYXRhCkdUUF9waGVubzEgPC0gcmVhZF9kZWxpbSgiL2RhdGEvaHVtZ2VuL0dUUF9nZW5vbWljcy9QTElOSy9pbnB1dC9waGVuby9ndHBfc2NyZWVuX3BoZW5vLnR4dCIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBUUlVFLCBkZWxpbSA9ICJcdCIpOwpHVFBfcGhlbm8yIDwtIHJlYWRfZGVsaW0oIi9kYXRhL2h1bWdlbi9HVFBfZ2Vub21pY3MvUExJTksvaW5wdXQvcGhlbm8vTWFzdGVyZGF0YXNldF8yLTItMTVfY2xlYW5lZF9yZWR1Y2VkX0Zvcl9NYWNoaW5lX0xlYXJuaW5nXzUtMjUtMjAxNi50eHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gVFJVRSwgZGVsaW0gPSAiXHQiKTsKYGBgCgpgYGB7cn0KR1RQX3BoZW5vMyA8LSByZWFkX2V4Y2VsKCIvZGF0YS9odW1nZW4vR1RQX2dlbm9taWNzL1BMSU5LL2lucHV0L3BoZW5vL1Jlc3NsZXJEYXRhX2NsZWFuZWRfcmVkdWNlZF9Gb3IgTWFjaGluZSBMZWFybmluZ193aXRoU0lEcy54bHN4Iiwgc2hlZXQgPSAxKSAlPiUgCiAgcHJpbnQoKSAKCkdUUF9waGVubzMgJT4lIAojICBjb3VudChzZXgpCiMgIGNvdW50KFBUU0RfZGlhZ25vc2lzKQogIHN1YnNldChzZWxlY3Q9Yygic2V4IiwiUFRTRF9kaWFnbm9zaXMiKSkgJT4lIHRhYmxlKCkKCmBgYAoKCmBgYHtyfQojIGluc3RhbGwgbmVjZXNzYXJ5IHBhY2thZ2VzCiNpbnN0YWxsLnBhY2thZ2VzKCJhcnNlbmFsIiwgIG1ldGhvZCA9ICJjdXJsIiwgbGliID0gIi9QSFNob21lL2JtMzYzL1IveDg2XzY0LXBjLWxpbnV4LWdudS1saWJyYXJ5LzMuNiIpCiNpbnN0YWxsLnBhY2thZ2VzKCJBbWlzYyIsICBtZXRob2QgPSAiY3VybCIsIGxpYiA9ICIvUEhTaG9tZS9ibTM2My9SL3g4Nl82NC1wYy1saW51eC1nbnUtbGlicmFyeS8zLjYiKQojaW5zdGFsbC5wYWNrYWdlcygidGFibGUxIiwgIG1ldGhvZCA9ICJjdXJsIiwgbGliID0gIi9QSFNob21lL2JtMzYzL1IveDg2XzY0LXBjLWxpbnV4LWdudS1saWJyYXJ5LzMuNiIpCgojIGNsZWFuIHVwIGRhdGEgZm9yIGRlbW8gdGFibGUKdGFiX2RhdGExIDwtIEdUUF9waGVubzMgJT4lIAogIG11dGF0ZShQVFNEX2RpYWdub3NpcyA9IG5hX2lmKG5hX2lmKFBUU0RfZGlhZ25vc2lzLCIyMDkyIiksIjcwMTEiKSkgJT4lIAogIG11dGF0ZShQVFNEX2RpYWdub3NpcyA9IGZhY3RvcihQVFNEX2RpYWdub3NpcywgbGFiZWxzID0gYygiQ29udHJvbHMiLCJDYXNlcyIpKSkgJT4lIAogIGZpbHRlcighaXMubmEoUFRTRF9kaWFnbm9zaXMpKQoKIyB3ZSBjYW4gdXNlIHRoaXMgcGFja2FnZSBpZiB3ZSBuZWVkIHNpZ25pZmljYW5jZSB0ZXN0cyBjb25kdWN0ZWQKbGlicmFyeShhcnNlbmFsKQoKc3VtX3RhYjEgPC0gdGFibGVieShQVFNEX2RpYWdub3NpcyB+IFBTU3RvdGFsICsgQkRJdG90YWxzY29yZSArIGFzLmZhY3RvcihCRElfQ0FUKSArIGFnZSArIGFzLmZhY3RvcihzZXgpICsgZWR1Y2F0aW9uICsgQ1RRVE9UICsgYXMuZmFjdG9yKHJhY2VfZXRobmljKSwgZGF0YT10YWJfZGF0YTEsIHRlc3Q9VCkKc3VtbWFyeShzdW1fdGFiMSkKCgojIGEgYmV0dGVyIGxvb2tvbmcgZGVzY3JpcHRpdmUgdGFibGVzIGNhbiBiZSBnZW5lcmF0ZWQgd2l0aCB0aGUgZm9sbG93aW5nIHBhY2thZ2UKbGlicmFyeSh0YWJsZTEpCmxhYmVsKHRhYl9kYXRhMSRQVFNEX2RpYWdub3NpcykgPC0gIlBUU0QgRGlhZ25vc2lzIgpsYWJlbCh0YWJfZGF0YTEkYWdlKSA8LSAiQWdlIgpsYWJlbCh0YWJfZGF0YTEkc2V4KSA8LSAiU2V4IgpsYWJlbCh0YWJfZGF0YTEkcmFjZV9ldGhuaWMpIDwtICJSYWNlL0V0aG5pY2l0eSIKbGFiZWwodGFiX2RhdGExJENUUVRPVCkgPC0gIkNoaWxkaG9vZCB0cmF1bWEgc2NvcmUiCgpzdW1fdGFiMiA8LSB0YWJsZTEofiBQU1N0b3RhbCArIEJESXRvdGFsc2NvcmUgKyBhZ2UgKyBhcy5mYWN0b3Ioc2V4KSArIGVkdWNhdGlvbiArIENUUVRPVCArIGFzLmZhY3RvcihyYWNlX2V0aG5pYykgfCBQVFNEX2RpYWdub3NpcywgCiAgICAgICAgICAgICAgICAgICBkYXRhID0gdGFiX2RhdGExKSMsIG92ZXJhbGwgPSBGQUxTRSkKc3VtX3RhYjIKYGBgCgpXaGF0IGlzIGEgYmV0dGVyIHRyYXVtYSBleHBvc3VyZSBtZWFzdXJlIHdlIHNob3VsZCB1c2U/CkRvIHdlIGhhdmUgQ1JQIGFuZCBvdGhlciBtb2xlY3VsYXIgbWFya2VycyBtZWFzdXJlZD8KRG8gd2UgaGF2ZSBCTUkgYW5kIG90aGVyIGFudGhyb3BvbWV0cmljIG1lYXN1cmVtZW50cz8KCgoKYGBge3J9CkdUUF9waGVubzQgPC0gR1RQX3BoZW5vMyAlPiUgCiMgIGZpbHRlcighaXMubmEoUFRTRF9zdGF0dXMpKSAlPiUgCiMgIGZpbHRlcihQVFNEX3N0YXR1czwxMjUpICU+JSAKICBzdWJzZXQoc2VsZWN0PWMoIlBUU0RfZGlhZ25vc2lzIiwgIkNUUVRPVCIsImVkdWNhdGlvbiIpKSAlPiUgCiAgbXV0YXRlKENBNCA9IGN1dChDVFFUT1QsIGJyZWFrcyA9IGMoLUluZiw0MCw2MCw4MCxJbmYpLCByaWdodD1UKSkgJT4lCiAgbXV0YXRlKEVBNCA9IGN1dChlZHVjYXRpb24sIGJyZWFrcyA9IGMoLUluZiwxLDMsNCxJbmYpLCByaWdodD1UKSkgCgpHVFBfcGhlbm80ICU+JSBwcmludCgpCiMsIGxhYmVscz1jKCJsb3ciLCJtaWRsb3ciLCJtaWRoaWdoIiwiaGlnaCIpCmBgYAoKYGBge3J9Cng9dGFibGUoR1RQX3BoZW5vNFssYygiUFRTRF9kaWFnbm9zaXMiLCJDQTQiKV0pCnkgPC0geFtjKDIsMSksXQpiYXJwbG90KHkpCgojcGFyKG1mcm93PWMoMSwgMSksIG1hcj1jKDUsIDUsIDUsIDEwKSwgeHBkPVRSVUUpCmJhcnBsb3QocHJvcC50YWJsZSh5LCBtYXJnaW4gPSAyKSwgYmVzaWRlPUYsIGhvcml6PUYsCiAgICAgICAgY29sPWMoInJlZCIsInN0ZWVsYmx1ZSIpLAogICAgICAgIGxlZ2VuZCA9IHJvd25hbWVzKHkpLCBsZWdlbmQudGV4dCA9IFRSVUUsCiAgICAgICAgYXJncy5sZWdlbmQgPSBsaXN0KHggPSAidG9wcmlnaHQiLCBidHkgPSAibiIsIGluc2V0PWMoLTAuMjUsMCkpLAogICAgICAgIGNleC5sYWI9MS41LAogICAgICAgIG1haW4gPSAiQ29uZGl0aW9uYWwgcHJvYmFiaWxpdHkgb2YgUFRTRCBkaWFnbm9zaXMiLAogICAgICAgIHlsYWIgPSAiUHJvcG9ydGlvbiB3aXRoIFBUU0QiLAogICAgICAgIHhsYWIgPSAiRWR1Y2F0aW9uIGxldmVsIikjLAogICAgICAgICNuYW1lcy5hcmcgPSBjKCJILlMuIERpcGxvbWEgXG4gb3IgbGVzcyIsIkEuQS4gRGVncmVlIFxuKDIgeXJzKSIsIkJhY2hlbG9yJ3MgXG4gRGVncmVlICg0IHlycykiLCJNYXN0ZXIncyBcbiBEZWdyZWUgb3IgbW9yZSIpKQoKYGBgCgoKIyMgR2Vub3R5cGUgZGF0YSAKCmBgYHtiYXNofQojIE51bWJlciBvZiB2YXJpYW50cyBhbmQgc2FtcGxlcwp3YyAtbCAvZGF0YS9odW1nZW4vR1RQX2dlbm9taWNzL1BMSU5LL2lucHV0L1BHQ19HVFBfSnVuZTIwMTcvR1RQQy9xYy9wdHNfZ3RwY19taXhfYW0tcWMue2JpbSxmYW19CgojIGFuIGFsdGVybmF0aXZlIGdlbm8gZGF0YSBmaWxlIGxvY2F0aW9uIChiZWZvZSBRQyB3aXRoKSB3aXRoIHNsaWdodGx5IG1vcmUgc2FtcGxlcyBhbmQgdmFyaWFudHMKd2MgLWwgL2RhdGEvaHVtZ2VuL0dUUF9nZW5vbWljcy9QTElOSy9pbnB1dC9QR0NfR1RQX0p1bmUyMDE3L0dUUEMvc3RhcnRpbmdfZGF0YS9BZGFtX2ZpbmFsX0dUUF9waGVuby57YmltLGZhbX0KYGBgCgoKYGBge3J9CkdUUF9mYW0xIDwtIHJlYWRfZGVsaW0oIi9kYXRhL2h1bWdlbi9HVFBfZ2Vub21pY3MvUExJTksvaW5wdXQvUEdDX0dUUF9KdW5lMjAxNy9HVFBDL3FjL3B0c19ndHBjX21peF9hbS1xYy5mYW0iLAogICAgICAgICAgICAgICAgICAgICAgICAgY29sX25hbWVzID0gRiwgZGVsaW0gPSAiXHQiKSAlPiUgCiAgcmVuYW1lX2FsbChmdW5zKGMoIkZJRCIsIklJRCIsInAxIiwicDIiLCJnZW5kIiwicGhlbiIpKSkgJT4lIAogIG11dGF0ZShJRCA9IHN0cl9yZXBsYWNlKElJRCwiUFRTRF8iLCIiKSkKCkdUUF9waGVubzQgPC0gR1RQX3BoZW5vMyAlPiUgCiAgbXV0YXRlKHNpZCA9IGFzLmNoYXJhY3RlcihzaWQpKSAlPiUgCiAgaW5uZXJfam9pbihHVFBfZmFtMSwgYnk9Yygic2lkIj0iSUQiKSkgJT4lIAogIHByaW50KCkKCiN3cml0ZS50YWJsZShHVFBfcGhlbm80LCAiL2RhdGEvaHVtZ2VuL2J1cm9vay9HVFBfYW5hbHlzaXMvR1RQX3BoZW5vMS50eHQiLCByb3cubmFtZXMgPSBGQUxTRSwgY29sLm5hbWVzID0gVFJVRSwgcXVvdGUgPSBGQUxTRSwgc2VwID0gIlx0IikKCmBgYAoKCiMjIEFuY2VzdHJ5IGVzdGltYXRpb24gYW5kIGNvbmZpcm1hdGlvbgoKUHJlcGFyZSBhIGZpbGUgd2l0aCBzZWxmLWlkZW50aWZpZWQgcmFjZS4KYGBge3J9CkdUUF9yYWNlMiA8LSBHVFBfcGhlbm80ICU+JSAKICBzdWJzZXQoc2VsZWN0PWMoIklJRCIsInJhY2VfZXRobmljIikpICU+JSAKICByZW5hbWUoRXRobmljaXR5X3JhY2U9cmFjZV9ldGhuaWMpCgojd3JpdGUudGFibGUoR1RQX3JhY2UyLCAiL2RhdGEvaHVtZ2VuL2J1cm9vay9HVFBfYW5hbHlzaXMvR1RQX3JhY2UyLnR4dCIsIHJvdy5uYW1lcyA9IEZBTFNFLCBjb2wubmFtZXMgPSBUUlVFLCBxdW90ZSA9IEZBTFNFLCBzZXAgPSAiXHQiKQoKYGBgCgpgYGB7YmFzaH0KY2QgL2RhdGEvaHVtZ2VuL2J1cm9vay9HVFBfYW5hbHlzaXMvClJzY3JpcHQgL2RhdGEvaHVtZ2VuL2J1cm9vay9BVVJPUkEvbm90ZWJvb2tzL2FuY2VzdHJ5X3ByZWRpY3Rpb25fc3ZtYW5kdHJlZS5SIC9kYXRhL2h1bWdlbi9HVFBfZ2Vub21pY3MvUExJTksvaW5wdXQvUEdDX0dUUF9KdW5lMjAxNy9HVFBDL3FjL3B0c19ndHBjX21peF9hbS1xYyAvZGF0YS9odW1nZW4vYnVyb29rL0dUUF9hbmFseXNpcy9HVFBfcmFjZTIudHh0CgpgYGAKCgpgYGB7cn0KdDEgPC0gcmVhZF9kZWxpbSgiL2RhdGEvaHVtZ2VuL2J1cm9vay9HVFBfYW5hbHlzaXMvdGFibGVfcHJlZCIsIGNvbF9uYW1lcyA9IFRSVUUsIGRlbGltID0gIiAiKQoKdDEgJT4lIAogIGZpbHRlcihpcy5uYShTdXBlclBvcHVsYXRpb24pKSAlPiUgCiAgZ3JvdXBfYnkocHJlZHRyZWUpICU+JQogIHN1bW1hcmlzZShuPW4oKSkgJT4lCiAgbXV0YXRlKG5fcGVyYyA9IDEwMCpuIC8gc3VtKG4pKSAlPiUgCiAgcHJpbnQoKQpgYGAKCgpgYGB7cn0KdGFyZ2V0X3JhY2UgPC0gcmVhZF9kZWxpbSgiL2RhdGEvaHVtZ2VuL2J1cm9vay9HVFBfYW5hbHlzaXMvR1RQX3JhY2UyLnR4dCIsIGNvbF9uYW1lcyA9IFRSVUUsIGRlbGltID0gIlx0IikKCiB0MSAlPiUgCiAgIGxlZnRfam9pbih0YXJnZXRfcmFjZSwgYnk9YygiU2FtcGxlIj0iSUlEIikpICU+JSAKICAgZmlsdGVyKCFpcy5uYShFdGhuaWNpdHlfcmFjZS55KSkgJT4lIAogICBzdWJzZXQoc2VsZWN0PWMoIkV0aG5pY2l0eV9yYWNlLnkiLCJwcmVkdHJlZSIpKSAlPiUgCiAgIHRhYmxlKCkgJT4lIAogICBwcmludCgpCgpgYGAKCgojIyBDb21wdXRpbmcgUFJTCgpgYGB7YmFzaH0KY2QgL2RhdGEvaHVtZ2VuL2J1cm9vay9HVFBfYW5hbHlzaXMvZ3RwX3B0c2QvCgovUEhTaG9tZS9ibTM2My9iaW4vcGxpbmsyIFwKICAtLWJmaWxlIC9kYXRhL2h1bWdlbi9HVFBfZ2Vub21pY3MvUExJTksvaW5wdXQvUEdDX0dUUF9KdW5lMjAxNy9HVFBDL3FjL3B0c19ndHBjX21peF9hbS1xYyBcCiAgLS1tYWYgMC4wMSBcCiAgLS1nZW5vIDAuMDEgXAogIC0tbWluZCAwLjEgXAogIC0taHdlIDAuMDAxIFwKICAtLW1ha2UtYmVkIFwKICAtLW91dCB0bXBfZ3RwMQoKYGBgCgoKYGBge2Jhc2h9CiMgd2l0aCBmcmVlemUtMiBQR0MtUFRTRCBzdW1tIHN0YXRzClIgLS1maWxlPS9QSFNob21lL2JtMzYzL2Jpbi9QUlNpY2VfdjEuMjUvUFJTaWNlX3YxLjI1LlIgLXEgLS1hcmdzICBcCiAgcGxpbmsgL1BIU2hvbWUvYm0zNjMvYmluL3BsaW5rMiBcCiAgYmFzZSAvZGF0YS9odW1nZW4vYnVyb29rL3N1bV9zdGF0cy9wdHNfYWFtX2ZyZWV6ZTJfb3ZlcmFsbC5yZXN1bHRzIFwKICB0YXJnZXQgL2RhdGEvaHVtZ2VuL2J1cm9vay9HVFBfYW5hbHlzaXMvZ3RwX3B0c2QvdG1wX2d0cDEgXAogIHBoZW5vLmZpbGUgL2RhdGEvaHVtZ2VuL2J1cm9vay9HVFBfYW5hbHlzaXMvR1RQX3JhY2UyLnR4dCBcCiAgYmluYXJ5LnRhcmdldCBUIFwKICBjb3ZhcmlhdGVzIEMxLEMyLEMzLEM0LEM1LEM2LEM3LEM4LEM5LEMxMCBcCiAgY2x1bXAuc25wcyBUIFwKICBwcnVuZS5zbnBzIEYgXAogIHF1YW50aWxlcyBUIFwKICBmaWduYW1lIGd0cF9wdHNkIFwKICB3ZCAvZGF0YS9odW1nZW4vYnVyb29rL0dUUF9hbmFseXNpcy9ndHBfcHRzZC8KYGBgCgpgYGB7YmFzaH0Kcm0gL2RhdGEvaHVtZ2VuL2J1cm9vay9HVFBfYW5hbHlzaXMvZ3RwX3B0c2QvcmF3ZmlsZS5yYXcKbHMgL2RhdGEvaHVtZ2VuL2J1cm9vay9HVFBfYW5hbHlzaXMvZ3RwX3B0c2QvCiNoZWFkIC9kYXRhL2h1bWdlbi9idXJvb2svR1RQX2FuYWx5c2lzL0dUUF9waGVubzEudHh0CmBgYAoK